# 指定使用的 cmake 的最低版本
cmake_minimum_required(VERSION 3.20)
# 项目名称
# 定义工程名称，并可指定工程的版本、工程描述、web主页地址、支持的语言（默认情况支持所有语言），如果不需要这些都是可以忽略的，只需要指定出工程名字即可。
project(CALC)
#[[
    在编译项目源文件的时候，很多时候都需要将源文件对应的头文件路径指定出来，这样才能保证在编译过程中编译器能够找到这些头文件，并顺利通过编译。
    在CMake中设置要包含的目录也很简单，通过一个命令就可以搞定了，他就是include_directories
    include_directories(headpath)
]]
# PROJECT_SOURCE_DIR宏对应的值就是我们在使用cmake命令时，后面紧跟的目录，一般是工程的根目录
include_directories(${PROJECT_SOURCE_DIR}/include)
# 在 CMake 中使用aux_source_directory 命令可以查找某个路径下的所有源文件
# aux_source_directory(< dir > < variable >)
# CMAKE_CURRENT_SOURCE_DIR 宏表示当前访问的 CMakeLists.txt 文件所在的路径。
# 搜索 src 目录下的源文件
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST )
# ----------------
#[[
    如果一个项目里边的源文件很多，在编写CMakeLists.txt文件的时候不可能将项目目录的各个文件一一罗列出来，这样太麻烦了。
    所以，在CMake中为我们提供了搜索文件的命令，他就是file（当然，除了搜索以外通过 file 还可以做其他事情）
    file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
        GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表，并将其存储到变量中。
        GLOB_RECURSE：递归搜索指定目录，将搜索到的满足条件的文件名生成一个列表，并将其存储到变量中
]]
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c)
file(GLOB MAIN_HEAD "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")

# ----------------

# 指定使用的C++标准
set(CMAKE_CXX_STANDARD 17)
#增加-std=c++11
# set(CMAKE_CXX_STANDARD 11)
#增加-std=c++14
# set(CMAKE_CXX_STANDARD 14)
#增加-std=c++17
# set(CMAKE_CXX_STANDARD 17)
#[[
    在执行 cmake 命令的时候指定出这个宏的值
    #增加-std=c++11
    cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
    #增加-std=c++14
    cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
    #增加-std=c++17
    cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17
]]

# 在CMake中指定可执行程序输出的路径，也对应一个宏，叫做EXECUTABLE_OUTPUT_PATH
#[[
    由于可执行程序是基于 cmake 命令生成的 makefile 文件然后再执行 make 命令得到的，
    所以如果此处指定可执行程序生成路径的时候使用的是相对路径 ./xxx/xxx，
    那么这个路径中的 ./ 对应的就是 makefile 文件所在的那个目录
]]
set(EXECUTABLE_OUTPUT_PATH ./bin)


# 定义工程会生成一个可执行程序
# 将多个文件生成一个可执行文件
# add_executable(可执行程序名 源文件名称)
#[[
    这里的可执行程序名和project中的项目名没有任何关系
    源文件名可以是一个也可以是多个，如有多个可用空格或;间隔
]]
# add_executable(app add.c sub.c div.c mult.c main.c)
# 使用变量
add_executable(app ${SRC_LIST})